package cn.wolfcode.luowowo.acticle.service;

import cn.wolfcode.luowowo.acticle.domain.Destination;
import cn.wolfcode.luowowo.acticle.domain.QueryContent;
import cn.wolfcode.luowowo.acticle.query.DestinationQuery;
import cn.wolfcode.luowowo.acticle.query.DestinationThemeQuery;
import cn.wolfcode.luowowo.common.exception.LogicException;
import com.github.pagehelper.PageInfo;

import java.util.List;

public interface IDestinationService {

    /**
     * 根据regionId获取其关联目的地
     * @param rid
     * @return
     */
    List<Destination> getDestByRegionId(Long rid);

    /**
     * 页面数据展示
     * @param qo
     * @return
     */
    PageInfo queryForList(DestinationQuery qo);

    /**
     * 面包屑导航
     * @param parentId
     * @return
     */
    List<Destination> getToasts(Long parentId);

    /**
     * 根据regionId获取热点目的地
     * @param regionId
     * @return
     */
    List<Destination> queryHotDestByRegionId(Long regionId);

    List<Destination> getDestByDeep(int deep);

    /**
     * 改变是否热门状态值
     * @param id
     * @param hot
     */
    void changeHotValue(Long id, Long hot) throws LogicException;

    /**
     * 改变区域的是否热门状态值
     * @param id
     * @param hot
     */
    void changeHotValueRegion(Long id, Long hot) throws LogicException;

    /**
     * 根据id更新目的地简介
     * @param id
     * @param info
     * @throws LogicException
     */
    void setInfo(Long id, String info) throws LogicException;

    /**
     * 根据id删除目的地
     * @param id
     */
    void delete(Long id)throws LogicException;

    /**
     * 查询所有目的地
     * @return
     */
    List<Destination> list();

    /**
     *获取国家
     * @param id
     * @return
     */
    Destination getCountry(Long id);

    /**
     * 获取省份
     * @param id
     * @return
     */
    Destination getProvince(Long id);

    /**
     * 多条件查询目的地
     * @param qo
     * @return
     */
    PageInfo queryDestByQo(DestinationThemeQuery qo);

    /**
     * 根据用户city查询目的地(city)
     * @param city
     * @return
     */
    Destination queryDestByUserCity(String city);

    /**
     * 根据月份查目的地
     * @param viewMonth
     * @return
     */
    List<Destination> queryDestinationByMonth(Integer viewMonth);
}
